package com.alan.camunda.boot.groovymod.compiled;

import groovy.lang.Binding;
import groovy.lang.GroovyShell;
import groovy.lang.Script;
import lombok.SneakyThrows;

/**
 * 每次 shell.parse 得到的 Script 对象不是同一个实例，且这个对象不是线程安全的
 */
public class CompiledDemo2 {

    private static GroovyShell shell = new GroovyShell();

    // 编译并缓存脚本
    public static Script compileScript(String script) {
        return shell.parse(script);
    }

    // 执行脚本
    public static Object executeScript(Script script, Binding binding) {
        script.setBinding(binding);
        return script.run();
    }

    @SneakyThrows
    public static void main(String[] args) {
        // 定义脚本
        String script = """
            import static com.alan.camunda.boot.util.StringFunctions.*
            def bizLogic() {
                return "Hello, " + name
            }
            return bizLogic()
        """;

        // 编译并缓存脚本
        Script s1 = compileScript(script);
        Script s2 = compileScript(script);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s1 == s2);

    }


}
